perm filename X2.FAI[TMP,LCS] blob
sn#130170 filedate 1974-11-13 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00010 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE X
C00003 00003 BEG: SETOM LINE
C00010 00004 DOIT: ANDCM C,BITTAB(D)
C00012 00005 ADDI A,1
C00013 00006 FRD: MOVSI A,'BIN'
C00015 00007 GETNAM: MOVEI A,
C00016 00008 XINI: OUTSTR [ASCIZ /TOTAL LENGTH IN INCHES (Y DIMENSION, DEFAULT = 11)?/]
C00019 00009 XGPOUT: OPEN XGP,[1017↔'XGP '↔0]
C00023 00010 FILNAM: 0
C00024 ENDMK
C⊗;
TITLE X
A←1
B←2
C←3
D←4
E←5
L←6
U←7
PEN←10
X←11
Y←12
XD←13
T←15
TT←16
P←17
LPDL←←69
DSK←←1
XGP←←2
LMAR←←=0
RMAR←←=1699
WIDTH←←RMAR-LMAR+1
LBUFL←←<WIDTH+43>/44
LSTBIT←←1⊗<LBUFL*44-WIDTH>
OVERLAP←←=50 ;OVERLAP 1/4 INCH
BOTTOM←←=50 ;SHIFT BOTTOM UP 1/4 INCH
;NUMBER OF STEPS TO WHERE P STARTS>
DOFF←←-(LMAR+RMAR+1)/2+=90
; +90 MOVES TO RIGHT FOR CENTERING X.
NBUFS←←4
EXTERN JOBREL,JOBFF
MAILBF: BLOCK 40
SIGN: 0
LINE: 0
PNTR: 0
BEG: SETOM LINE
GETLIN LINE ;FOR ERROR PRINTOUT
MERGE: CALLI
HRRZS LINE ;CLEAR LINE BITS
MOVE P,[-LPDL,,PDL-1]
FILIN: OUTSTR [ASCIZ /FILE? (DEFAULT IS PLOT.BIN) /]
PUSHJ P,FRD
SETZ A,
YAGN1: MOVE B,[-BOTTOM]
OUTSTR [ASCIZ/ORIGIN X OFFSET FROM SIDE (DEFAULT IS 4(CENTER))?/]
PUSHJ P,RNUM
JRST [ MOVE A,[DOFF]
JRST YDEF]
IMULI A,=100
CAIN C,"." ;DECIMAL POINT?
JRST [ INCHWL C
CAIN C,15
INCHWL C
CAIL C,"0"
CAILE C,"9"
JRST .+1
SUBI C,60
IMULI C,=10
SKIPE SIGN
MOVN C,C
ADD A,C
PUSH P,A
PUSHJ P,RNUM ;JUST GOBBLE THE REST
JFCL
POP P,A
JRST .+1]
MOVN A,A
LSH A,1 ;*2 (MAKE IT STEPS)
YDEFP: CAIE C,12
JRST [ CLRBFI
JRST YAGN1]
YDEF: ADD A,B
MOVNM A,INIX#
AGAIN: MOVE A,[FILNAM,,LKENT]
BLT A,LKENT+3
OPEN DSK,[14↔'DSK '↔IBUF]
JRST 4,.
INBUF DSK,NBUFS
LOOKUP DSK,LKENT
JRST FNF
ASKLEN: SETZM POOB#
PUSHJ P,XINI
JRST CORLUZ
SETZM XX#
SETZM YY#
SETZM PENN#
OUTER: IN DSK,
JRST PLOT
STATO DSK,20000
JRST 4,.
RELEAS DSK,
IFN LSTBIT-1,<PUSHJ P,XFIX>
JRST XGPOUT
PLOT: HRR 14,IBUF+1
MOVN E,1(14)
MOVSI E,(E)
HRR E,IBUF+1
PLOT1: MOVE 14,2(E)
JUMPE 14,ENOUT
LSHC 14,-14
ASH 15,-30
MOVEM 15,SVPEN#
LSHC 14,-14
ASH 15,-30
MOVEM 15,SVY#
LSHC 14,-14
ASH 15,-30
MOVEM 15,SVX#
MOVM 14,SVPEN
CAIN 14,1
JRST PENOK
SUBI 14,3
CAMN 14,PENN
JRST PENOK
HRLI PEN,(<CAIA>)
SKIPGE 14
HRLI PEN,(<TDNN C,(D)>)
PENOK: MOVEM 14,PENN
MOVE 0,SVX
SUB 0,XX
SETZ 16,
SKIPG 0
MOVEI 16,2
SKIPL 0
MOVEI 16,1
MOVE 14,SVY
SUB 14,YY
SETZ 15,
SKIPG 14
MOVEI 15,10
SKIPL 14
MOVEI 15,4
MOVMS 14
MOVMS 0
CAMG 14,0
JRST NOEX
EXCH 14,0
EXCH 15,16
NOEX: SETZ C,
JUMPE NOMOVE
JUMPE 14,NORM
SETZ 4,
TLNE 14,200000
JRST .+4
LSH 14,1
TRO 14,1
AOJA 4,.-4
SUBI 4,=34
MKSC: MOVEM T,TSV#
IDIV 14,0
MOVE T,TSV
MOVNS 4
LSH 14,(4)
MOVEM 14,STEP#
SETZ 14,
IOR 15,16
INLOOP: ADD 14,STEP
DPB 16,[360600,,000003]
TLZE 14,200000
DPB 15,[360600,,000003]
JSR MAIN
SOJG INLOOP
JRST .+4
NORM: DPB 16,[360600,,000003]
JSR MAIN
SOJG NORM
MOVE 4,SVX
MOVEM 4,XX
MOVE 4,SVY
MOVEM 4,YY
NOMOVE: SKIPL SVPEN
JRST ENOUT
SETZM XX
SETZM YY
ENOUT: AOBJN E,PLOT1
JRST OUTER
MAIN: 0
JFFO C,DOIT
JRST @MAIN
FNF: PUSHJ P,DETCHK
PUSHJ P,XERR
PUSHJ P,ERRPNT
ASCIZ /LOOKUP FAILED.
/
SKIPGE DET
CALLI 12
JRST FILIN
CORLUZ: MOVE T,TT
LSH T,-12
PUSH P,T
PUSHJ P,DETCHK
PUSHJ P,XERR
POP P,T
PUSHJ P,DECOUT
PUSHJ P,ERRPNT
ASCIZ / K OF CORE NEEDED!
/
SKIPGE DET
CALLI 12
JRST ASKLEN
LOSE: SKIPN POOB
TLNN PEN,400000
JRST DOPEN
SETOM POOB
PUSHJ P,DETCHK
PUSHJ P,XERR
PUSHJ P,ERRPNT
ASCIZ /POINT OUT OF BOUNDS, /
CAIGE Y,(L)
JRST [ PUSHJ P,ERRPNT
ASCIZ/-Y/
JRST BACTT]
PUSHJ P,ERRPNT
ASCIZ/+Y/
BACTT: MOVE TT,SVTT#
JRST DOPEN
DECOUT: IDIVI T,=10
HRLM TT,(P)
SKIPE T
PUSHJ P,DECOUT
HLRZ TT,(P)
ADDI TT,60
ROT TT,-7
MOVEM TT,.+2
PUSHJ P,ERRPNT
0
POPJ P,
ERRPNT: MOVEM TT,SVTT
HRRZ TT,(P)
MOVEM TT,PNTR
MOVEI TT,LINE
TTYMES TT,
JRST [ OUTSTR[ASCIZ/TTYMES FAILED /]
OUTSTR @PNTR
OUTSTR[ASCIZ/
/]
JRST .+1]
POP P,TT
HRL TT,(TT)
TLNE TT,376
AOJA TT,.-2
JRST 1(TT)
XERR: PUSHJ P,ERRPNT
ASCIZ/
MESSAGE FROM X WORKING ON /
MOVE TT,FILNAM
PUSHJ P,SIXOUT
PUSHJ P,ERRPNT
ASCIZ/./
HLLZ TT,FILEXT
PUSHJ P,SIXOUT
PUSHJ P,ERRPNT
ASCIZ/[/
MOVE TT,FILPPN
PUSHJ P,SIXOUT
PUSHJ P,ERRPNT
ASCIZ/] : /
POPJ P,
SIXOUT: JUMPE TT,CPOPJ
SETZ T,
LSHC T,6
ADDI T,40
PUSH P,TT
ROT T,-7
MOVEM T,.+2
PUSHJ P,ERRPNT
0
POP P,TT
JRST SIXOUT
DETCHK: SETOM DET#
GETLIN DET
HRRES DET
SKIPL DET
AOS (P)
POPJ P,
DOIT: ANDCM C,BITTAB(D)
XCT MOVI1(D)
XCT MOVI2(D)
DOI3: XCT MOVI3(D)
DOPEN: XCT PEN
CAIGE Y,(L)
JRST MAIN+1
CAIL Y,-LBUFL-1(U)
SKIPA
IORM B,@X
JRST MAIN+1
MOVI1: HRLI PEN,(<CAIA>)
HRLI PEN,(<TDNN C,(D)>)
SUBI Y,LBUFL+1
ADDI Y,LBUFL+1
ROT B,-1
JUMPGE B,DOI3
MOVI2: JRST MAIN+1
JRST MAIN+1
CAIGE Y,(L)
CAIL Y,-LBUFL-1(U)
JUMPGE B,DOPEN
XCT XMOVL(X)
MOVI3: JRST 4,.
JRST 4,.
JRST LOSE
JRST LOSE
XCT XMOVR(X)
ROT B,1
ADDI A,1
XMOVL: HRLOI X,XD
REPEAT LBUFL-1,<SUBI X,1>
SOJL A,.+1
MOVE X,[Y,,LBUFL-1]
AOJA A,DOI3
SOJL A,XONR
XMOVR: REPEAT LBUFL-1,<ADDI X,1>
MOVE X,[XD,,LBUFL]
ADDI A,1
XONR: MOVSI X,Y
AOJA A,DOPEN
FRD: MOVSI A,'BIN'
MOVEM A,FILEXT
PUSHJ P,GETNAM
SKIPN A
MOVE A,['PLOT ']
MOVEM A,FILNAM
CAIE C,"."
JRST NOEXT
PUSHJ P,GETNAM
MOVEM A,FILEXT
NOEXT: CAIE C,"["
JRST FRDX
PUSHJ P,GETP
HRLZM A,FILPPN
PUSHJ P,GETP
HRRM A,FILPPN
FRDX: INCHRW C
CAIE C,12
JRST FRDX
POPJ P,
RNUM: INCHWL C
CAIN C,15
JRST RNUM
CAIN C,12
POPJ P,
AOS (P)
MOVEI A,
SETZM SIGN
CAIN C,"-"
JRST [ PUSHJ P,RNUML
SETOM SIGN
MOVN A,A
POPJ P,]
CAIN C,"+"
RNUML: INCHWL C
CAIL C,"0"
CAILE C,"9"
JRST RNUMX
IMULI A,12
ADDI A,-"0"(C)
JRST RNUML
RNUMX: CAIN C,15
INCHRW C
POPJ P,
GETNAM: MOVEI A,
MOVE B,[440600,,A]
GETNML: PUSHJ P,RCH
POPJ P,
SUBI C,40
TLNE B,770000
IDPB C,B
JRST GETNML
GETP: MOVEI A,
GETPL: PUSHJ P,RCH
POPJ P,
TRNE A,770000
JRST GETPL
LSH A,6
ADDI A,-40(C)
JRST GETPL
RCH: INCHWL C
CAIN C,42
JRST RCHQ
CAIE C,11
CAIN C," "
JRST RCH
CAIE C,"."
CAIN C,","
POPJ P,
CAIE C,"["
CAIN C,"]"
POPJ P,
RCHQR: CAIGE C,40
POPJ P,
CAIL C,"a"
CAILE C,"z"
CAIA
SUBI C,40
JRST POPJ1
RCHQ: INCHWL C
JRST RCHQR
XINI: OUTSTR [ASCIZ /TOTAL LENGTH IN INCHES (Y DIMENSION, DEFAULT = 11)?/]
PUSHJ P,RNUM
MOVEI A,=11 ;ASSUME 11 INCHES
JUMPLE A,[XINLER:CLRBFI
JRST XINI]
CAIE C,12
JRST XINLER
IMULI A,=200
PUSH P,A ;SAVE THIS
YINI1: OUTSTR [ASCIZ \ORIGIN Y OFFSET FROM BOTTOM, 200/IN.(DEFAULT IS 100)?\]
PUSHJ P,RNUM
JRST [ MOVEI A,=100
JRST IYDEF]
CAIE C,12
JRST [ CLRBFI
JRST YINI1]
IYDEF: IMULI A,LBUFL+1
MOVEM A,IYPOS#
POP P,A
XDEF: MOVEM A,LINCNT#
MOVEI B,-1(A)
IMULI A,LBUFL+1
MOVE T,JOBFF
MOVEM T,XGPPTR
SOS XGPPTR
MOVEI T,2(A) ;2 EXTRA WORDS
MOVNI TT,(T)
ADD T,XGPPTR
HRLM TT,XGPPTR
MOVE TT,T
CALLI T,11
POPJ P,
HRRZ L,XGPPTR
MOVSI T,1(L)
HRRI T,2(L)
SETZM 1(L)
MOVE U,JOBREL
BLT T,(U)
MOVE TT,[BYTE (12)4001,LMAR,LBUFL]
MOVEM TT,1(L) ;FIRST ONE HAS MARK AND CUT WITH IT
TLZ TT,400000 ;DELETE MARK AND CUT
MOVEI T,1+LBUFL+1(L)
XINL: MOVEM TT,(T)
ADDI T,LBUFL+1
SOJG B,XINL
MOVSI TT,400100
MOVEM TT,(T)
MOVE PEN,[CAIA BYTTAB]
MOVE Y,IYPOS
ADDI Y,2(L)
MOVEI XD,DBUF+1
SKIPL A,INIX ;WHERE DO WE START
JRST MAYBON
SUBI A,43
IDIV A,[-44]
HRLOI X,XD
SOJA A,SETB
MAYBON: ADDI A,43
IDIVI A,44
CAILE A,LBUFL
JRST OFFRT
MOVE X,A
SETZ A,
HRLI X,Y
JRST SETB
OFFRT: MOVE X,[XD,,LBUFL]
SUBI A,LBUFL
SETB: MOVE B,INIX
IDIVI B,44
MOVSI B,400000
MOVN C,C
ROT B,(C)
POPJ1: AOS (P)
CPOPJ: POPJ P,
XGPOUT: OPEN XGP,[1017↔'XGP '↔0]
JRST NOXGP
OUTSTR[ASCIZ/CRANKING XGP
/]
LOCK
OUTIT: OUT XGP,XGPPTR
JRST OUTOK
DSKERR: PUSHJ P,DETCHK
PUSHJ P,XERR
PUSHJ P,ERRPNT
ASCIZ /XGP OUTPUT ERROR.
/
OUTOK: UNLOCK
RELEAS XGP,
JRST XMORE
XMORE: PUSHJ P,CORDWN ;REALLY DONE, CORE DOWN
PUSHJ P,DETCHK
JRST DODEL ;DELETE AUTOMATICALLY IF DETACHED
OUTSTR[ASCIZ/DELETE BIN FILE?/]
INCHRW C
CAIN C,15
INCHRW C
CAIE C,12
OUTSTR[ASCIZ/
/]
CAIE C,"Y"
CAIN C,"y"
CAIA
JRST NODEL
DODEL: MOVE A,[FILNAM,,LKENT]
BLT A,LKENT+3
INIT DSK,17
'DSK '
0
JRST [ SKIPGE DET
PUSHJ P,XERR
PUSHJ P,ERRPNT
ASCIZ/COULDN'T GET DISK FOR DELETE!
/
JRST NODEL]
LOOKUP DSK,LKENT
JRST [ SKIPGE DET
PUSHJ P,XERR
PUSHJ P,ERRPNT
ASCIZ/LOOKUP FOR DELETE FAILED!
/
JRST NODEL]
MOVE A,FILPPN
MOVEM A,LKENT+3
SETZM LKENT
RENAME DSK,LKENT
CAIA
JRST NODEL
SKIPGE DET
PUSHJ P,XERR
PUSHJ P,ERRPNT
ASCIZ/RENAME FOR DELETE FAILED!
/
NODEL: RELEASE DSK,
SKIPGE DET
PUSHJ P,XERR
PUSHJ P,ERRPNT
ASCIZ/ALL DONE!
/
CALLI 12 ;LEAVE
NOXGP: PUSHJ P,DETCHK
PUSHJ P,XERR
PUSHJ P,ERRPNT
ASCIZ /XGP NOT AVAILABLE (I THOUGHT I WAS WAITING FOR IT)!
/
POPJ P,
XGPPTR: BLOCK 2
IFN LSTBIT-1,<
XFIX: MOVE A,[LSTBIT-1]
MOVE C,LINCNT
HRRZ D,XGPPTR
XFIXL: ANDCAM A,LBUFL-1+2(D)
ADDI D,LBUFL+1
SOJG C,XFIXL
POPJ P,
>
CORDWN: MOVE T,JOBFF
SUBI T,1
CALLI T,11
JRST 4,.
POPJ P,
FILNAM: 0
FILEXT: 0
0
FILPPN: 0
LKENT: BLOCK 4
XGSNAM: 0
XGSEXT: 0
0
XGSPPN: 0
IBUF: BLOCK 3
BITTAB: FOR I←43,0,-1{1⊗I
}
BYTTAB: FOR I←36,0,-6{REPEAT 6,{77⊗I}}
DBUF: BLOCK LBUFL+2
PDL: BLOCK LPDL
END BEG